package com.plm.mqshequ.nosql;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Repository;

import java.util.concurrent.TimeUnit;

/**
 * Redis String类型操作
 * @author Limi
 * @create 2019-01-16 8:06
 */
@Repository
public class RedisStringOps {

    @Autowired
    private StringRedisTemplate template;

    /**
     * set key value
     * 将字符串值 value 关联到 key
     */
    public void set(String key, String value) {
        template.opsForValue().set(key, value);
    }

    /**
     * setnx key value
     * 将 key 的值设为 value ，当且仅当 key 不存在
     */
    public boolean setnx(String key, String value) {
        return template.opsForValue().setIfAbsent(key, value);
    }

    /**
     * setex key seconds value
     * 将值 value 关联到 key ，并将 key 的生存时间设为 seconds (以秒为单位)
     */
    public void setex(String key, long timeout, String value) {
        template.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
    }

    /**
     * get key
     * 返回 key 所关联的字符串值
     */
    public String get(String key){
        return template.opsForValue().get(key);
    }

    /**
     * incr key
     * 将 key 中储存的数字值增一
     */
    public Long incr(String key){
        return template.opsForValue().increment(key);
    }

    /**
     * incrby key increment
     * 将 key 所储存的值加上增量 increment
     */
    public Long incrby(String key, long delta){
        return template.opsForValue().increment(key, delta);
    }

    /**
     * incrby key increment
     * 将 key 所储存的值加上(双精度)增量 increment
     */
    public Double incrby(String key, Double delta){
        return template.opsForValue().increment(key, delta);
    }

}
